package com.lu.component.rpc.annotations;

import com.lu.component.rpc.model.enums.RpcContentTypeEnum;
import com.lu.component.rpc.model.enums.RpcFlowControlEnum;
import com.lu.component.rpc.model.enums.RpcMethodEnum;

import java.lang.annotation.*;

/**
 * rpc接口请求
 *
 * @author: zhanglu
 * @date: 2023/7/6 17:41
 * @modify: 修改人信息, 修改内容 2023/7/6 17:41
 */
@Target({ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface RpcApiRequest {

    /**
     * 接口地址
     */
    String value();

    /**
     * 请求方式
     */
    RpcMethodEnum method() default RpcMethodEnum.POST;

    /**
     * 文本类型
     */
    RpcContentTypeEnum contentType() default RpcContentTypeEnum.AUTO;

    /**
     * 连接超时时间
     */
    long connectionTimeout() default -1;

    /**
     * 读取超时时间
     */
    long readTimeout() default -1;

    /**
     * 限流策略
     */
    RpcFlowControlEnum limit() default RpcFlowControlEnum.NONE;

    /**
     * 限流key（默认方法全限定名称）
     * @return
     */
    String limitKey() default "";

    /**
     * 每秒吞吐量
     */
    int permits() default 1;

    /**
     * 限流等待时间
     * @return
     */
    long limitWaitTime() default 100;

}
